﻿using System;
using System.Data;
using System.Data.SqlClient;

namespace CentroVentas.Clases.Funciones
{
    class Compras
    {
          
        public static DataSet getCompras()
        {
            try
            {
                DataBase db = DataBase.GetInstance();

                DataSet ds = new DataSet();
                CrearTabla(ds);
                
                db.dadap.SelectCommand = new SqlCommand("SELECT * FROM compra", db.Conn);
                db.dadap.Fill(ds, "listadoCompras");

                foreach (DataRow dr in ds.Tables["listadoCompras"].Rows)
                {
                    DataRow drc = ds.Tables["Compras"].NewRow();
                    drc["Id"] = dr["id"];
                    drc["Orden"] = dr["orden"];
                    drc["IdUsuario"] = dr["usuario"];
                   Clases.Usuarios usu = new Clases.Usuarios(Convert.ToInt32(dr["usuario"]));
                    drc["NomUsuario"] = usu.Nombre;
                    drc["IdProveedor"] = Convert.ToInt32(getIdProveedorByOrdenCompra(dr["orden"].ToString()));
                    Proveedores prv = new Proveedores(Convert.ToInt32(drc["IdProveedor"]));
                    drc["NomProveedor"] = prv.Nombre;
                    drc["FechaPedido"] = dr["fechapedido"];
                    Compra cmp = new Compra(dr["orden"].ToString());
                    drc["Total"] = cmp.Total.ToString();
                    drc["Comentarios"] = cmp.Comentarios;
                    ds.Tables["Compras"].Rows.Add(drc);
                }
                return ds;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            
        }

        private static void CrearTabla(DataSet ds)
        {
            ds.Tables.Add("Compras");
            ds.Tables["Compras"].Columns.Add("Id");
            ds.Tables["Compras"].Columns.Add("Orden");
            ds.Tables["Compras"].Columns.Add("IdUsuario");
            ds.Tables["Compras"].Columns.Add("NomUsuario");
            ds.Tables["Compras"].Columns.Add("IdProveedor");
            ds.Tables["Compras"].Columns.Add("NomProveedor");
            ds.Tables["Compras"].Columns.Add("FechaPedido");
            ds.Tables["Compras"].Columns.Add("Total");
            ds.Tables["Compras"].Columns.Add("Comentarios");
            //ds.Tables["Compras"].Columns.Add("Estado");
        }

        public static int CrearCompra(int usuario,int proveedor,string comentarios,DataSet productos)
        {
            try
            {
                int reg = 0;
                DataBase db = DataBase.GetInstance();
                db.dadap.InsertCommand = new SqlCommand("INSERT INTO compra VALUES(@orden,@usuario,@proveedor,@fecha,@comentarios,1,DEFAULT,DEFAULT)", db.Conn);
                db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@orden",SqlDbType.VarChar)).Value = getNumeroOrden();
                db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@usuario", SqlDbType.Int)).Value = usuario;
                db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@proveedor", SqlDbType.Int)).Value = proveedor;
                db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@fecha", SqlDbType.DateTime)).Value = DateTime.Now.ToString();
                db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@comentarios", SqlDbType.VarChar)).Value = comentarios;
                db.dadap.InsertCommand.ExecuteNonQuery();
                /*
                 id NUMERIC IDENTITY NOT NULL,
	orden VARCHAR(MAX),
	usuario NUMERIC NOT NULL,
	proveedor NUMERIC NOT NULL,
	fechapedido DATETIME NOT NULL,
	comentarios VARCHAR(MAX),
	tipopago NUMERIC NOT NULL,
	estado NUMERIC NOT NULL DEFAULT 0,
	fechaPago DATETIME DEFAULT NULL,
                 */
                reg = getUltimoRegCompra();
                foreach (DataRow dr in productos.Tables["DetalleCompra"].Rows)
                {
                    db.dadap.InsertCommand = new SqlCommand("INSERT INTO detallecompra VALUES(@idcompra,@idprecio);", db.Conn);
                    db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@idcompra", SqlDbType.Int)).Value = reg;
                    db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@idprecio", SqlDbType.Int)).Value = dr["IdPrecio"];
                    db.dadap.InsertCommand.ExecuteNonQuery();
                }
                return reg;
            }
            catch (Exception ex)
            {
                Utiles.Utilidades.mensaje(Utiles.TipoMensaje.ERROR, ex.Message, 11);
                return 0;
            }
            
        }

        private static string getNumeroOrden()
        {
            try
            {
                DataBase db = DataBase.GetInstance();
                DataSet ds = new DataSet();
                db.dadap.SelectCommand = new SqlCommand("SELECT COUNT(id) FROM compra", db.Conn);
                db.dadap.Fill(ds, "CANTIDAD");
                return ds.Tables["CANTIDAD"].Rows[0].ItemArray[0].ToString().PadLeft(8,'0');
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        private static int getUltimoRegCompra()
        {
            try
            {
                DataBase db = DataBase.GetInstance();
                DataSet ds = new DataSet();
                db.dadap.SelectCommand = new SqlCommand("SELECT MAX(id) FROM compra", db.Conn);
                db.dadap.Fill(ds, "ur");
                return Convert.ToInt32(ds.Tables["ur"].Rows[0].ItemArray[0]);
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        public static int getIdProveedorByOrdenCompra(string orden)
        {
            try
            {
                DataBase db = DataBase.GetInstance();
                DataSet ds = new DataSet();

                db.dadap.SelectCommand = new SqlCommand("SELECT compra.proveedor FROM compra WHERE compra.orden = @orden",db.Conn);
                db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@orden", SqlDbType.VarChar)).Value = orden;
                db.dadap.Fill(ds, "Id");
                return Convert.ToInt32(ds.Tables["Id"].Rows[0].ItemArray[0].ToString());
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

    }
}
